package com.wen.edu.controller;


import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.wen.commonutils.ResultEntity;
import com.wen.edu.entity.EduTeacher;
import com.wen.edu.entity.vo.TeacherQueryVO;
import com.wen.edu.service.EduTeacherService;
import io.swagger.annotations.Api;
import org.springframework.util.StringUtils;
import org.springframework.web.bind.annotation.*;

import javax.annotation.Resource;
import java.util.List;

/**
 * <p>
 * 讲师 前端控制器
 * </p>
 *
 * @author wen
 * @since 2021-05-26
 */
@Api(description = "讲师管理")
@RestController
@RequestMapping("/edu/service/teacher")
public class EduTeacherController {
    @Resource
    EduTeacherService teacherService;

    /**
     * 查询所有讲师信息
     *
     * @return list of all
     */
    @GetMapping("findAll")
    public ResultEntity findAll() {
        List<EduTeacher> list = teacherService.list(null);
        return ResultEntity.ok().data("EduTeachers", list);
    }

    /**
     * 根据路径变量id 逻辑删除讲师信息
     *
     * @param id 目标id
     * @return result of delete operation
     * true --> ok
     * false --> error
     */
    @DeleteMapping("removeTeacher/{id}")
    public ResultEntity removeTeacher(@PathVariable String id) {
        boolean b = teacherService.removeById(id);
        if (b) {
            return ResultEntity.ok();
        } else {
            return ResultEntity.error();
        }
    }

    /**
     * 分页查询讲师数据的方法
     *
     * @param current 当前页
     * @param limit   每页显示的数量
     * @return result of pageTeacher operation
     */
    @GetMapping("pageTeacher/{current}/{limit}")
    public ResultEntity pageTeacherList(
            @PathVariable("current") Integer current,
            @PathVariable("limit") Integer limit) {
//        创建 page 分页对象,必须要传current和limit参数，不然就是全查询而不是分页查询
        Page<EduTeacher> page = new Page<>(current, limit);
        //        构建查询条件，使用QueryWrapper
        QueryWrapper<EduTeacher> wrapper = new QueryWrapper<>();
        //        按照创建时间降序排列
        wrapper.orderByDesc("gmt_create");
//        调用分页方法，第一个参数为创建的分页对象，第二个参数为查询条件，没有填 null,最后会把结果封装到分页对象中
        teacherService.page(page, wrapper);
//        获取总记录数
        long total = page.getTotal();
//        获取每页显示的数量集合
        List<EduTeacher> records = page.getRecords();
//        返回结果
        return ResultEntity.ok().data("total", total).data("rows", records);
    }

    /**
     * 按照组合条件并分页查询讲师信息，查询条件可以没有，
     * 所以在RequestBody注解中需要添加required=false
     * 并且请求方法必须为post
     *
     * @param current        当前页
     * @param limit          每页显示的数量
     * @param teacherQueryVO 查询条件封装的对象
     * @return result of operation
     */
    @PostMapping("pageTeacherCondition/{current}/{limit}")
    public ResultEntity pageTeacherCondition(
            @PathVariable("current") Integer current,
            @PathVariable("limit") Integer limit,
            @RequestBody(required = false) TeacherQueryVO teacherQueryVO
    ) {
//        创建 page 分页对象,必须要传current和limit参数，不然就是全查询而不是分页查询
        Page<EduTeacher> page = new Page<>(current, limit);
//        构建查询条件，使用QueryWrapper
        QueryWrapper<EduTeacher> wrapper = new QueryWrapper<>();
//      类似动态SQL，需要判断是否为空或空字符串
        String name = teacherQueryVO.getName();
        Integer level = teacherQueryVO.getLevel();
        String begin = teacherQueryVO.getBegin();
        String end = teacherQueryVO.getEnd();
//        第一个参数为对应数据表中要查询的字段名
        if (!StringUtils.isEmpty(name))
            wrapper.like("name", name);
        if (!StringUtils.isEmpty(level))
            wrapper.eq("level", level);
        if (!StringUtils.isEmpty(begin))
            wrapper.ge("gmt_create", begin);
        if (!StringUtils.isEmpty(end))
            wrapper.le("gmt_create", end);
//        按照创建时间降序排列
        wrapper.orderByDesc("gmt_create");

//        调用分页方法，第一个参数为创建的分页对象，第二个参数为查询条件，没有填 null,最后会把结果封装到分页对象中
        teacherService.page(page, wrapper);
//        获取总记录数
        long total = page.getTotal();
//        获取每页显示的数量集合
        List<EduTeacher> records = page.getRecords();
//        返回结果
        return ResultEntity.ok().data("total", total).data("rows", records);
    }

    /**
     * 添加讲师的功能
     *
     * @param teacher target
     * @return result
     */
    @PostMapping("addTeacher")
    public ResultEntity addTeacher(@RequestBody EduTeacher teacher) {
        boolean save = teacherService.save(teacher);
        if (save) {
            return ResultEntity.ok();
        } else
            return ResultEntity.error();
    }

    /**
     * 根据讲师的id查询信息
     *
     * @param id target id
     * @return result of operation
     */
    @GetMapping("getTeacher/{id}")
    public ResultEntity getTeacher(@PathVariable String id) {
        EduTeacher teacher = teacherService.getById(id);
        return ResultEntity.ok().data("teacher", teacher);
    }

    /**
     * 根据讲师id更新讲师信息
     *
     * @param teacher target object
     * @return result of operation
     */
    @PostMapping("updateTeacher")
    public ResultEntity updateTeacher(@RequestBody EduTeacher teacher) {
        boolean b = teacherService.updateById(teacher);
        if (b)
            return ResultEntity.ok();
        else return ResultEntity.error();
    }
}

